import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
from datetime import datetime, timedelta
import hashlib

# 页面配置已在主应用中设置

# 页面标题
st.title("👥 用户权限管理")
st.markdown("---")

# 侧边栏导航
st.sidebar.title("功能导航")
page_selection = st.sidebar.selectbox(
    "选择功能模块",
    ["用户概览", "用户管理", "角色管理", "权限管理", "组织架构", "访问控制", "审计日志"]
)

# 用户概览页面
if page_selection == "用户概览":
    st.header("📊 用户概览")
    
    # 用户统计概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric(
            label="总用户数",
            value="1,234个",
            delta="+23个"
        )
    
    with col2:
        st.metric(
            label="活跃用户",
            value="987个",
            delta="+15个"
        )
    
    with col3:
        st.metric(
            label="在线用户",
            value="156个",
            delta="+8个"
        )
    
    with col4:
        st.metric(
            label="今日登录",
            value="456次",
            delta="+34次"
        )
    
    # 用户分布分析
    col1, col2 = st.columns(2)
    
    with col1:
        # 部门用户分布
        dept_distribution = pd.DataFrame({
            '部门': ['采购部', '仓储部', '销售部', '财务部', '运营部', '技术部'],
            '用户数': [234, 198, 156, 123, 89, 67]
        })
        
        fig_dept = px.pie(dept_distribution, values='用户数', names='部门',
                         title="部门用户分布")
        st.plotly_chart(fig_dept, use_container_width=True)
    
    with col2:
        # 角色用户分布
        role_distribution = pd.DataFrame({
            '角色': ['普通用户', '部门主管', '系统管理员', '财务专员', '采购专员'],
            '用户数': [567, 234, 45, 123, 156]
        })
        
        fig_role = px.bar(role_distribution, x='角色', y='用户数',
                         title="角色用户分布")
        st.plotly_chart(fig_role, use_container_width=True)
    
    # 用户活跃度分析
    st.subheader("用户活跃度分析")
    
    # 生成最近30天的活跃用户数据
    dates = pd.date_range(start='2024-02-15', end='2024-03-15', freq='D')
    active_users = pd.DataFrame({
        '日期': dates,
        '活跃用户数': [800 + 100*np.sin(i*2*np.pi/7) + np.random.normal(0, 30) 
                     for i in range(len(dates))],
        '新增用户数': [10 + 5*np.sin(i*2*np.pi/7) + np.random.normal(0, 2) 
                     for i in range(len(dates))]
    })
    
    fig_activity = px.line(active_users, x='日期', y=['活跃用户数', '新增用户数'],
                          title="用户活跃度趋势")
    st.plotly_chart(fig_activity, use_container_width=True)
    
    # 最近登录用户
    st.subheader("最近登录用户")
    
    recent_logins = pd.DataFrame({
        '用户名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
        '姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
        '部门': ['采购部', '仓储部', '销售部', '财务部', '运营部', '技术部', '采购部', '销售部'],
        '角色': ['采购专员', '仓管员', '销售经理', '财务专员', '运营主管', '系统管理员', '采购主管', '销售专员'],
        '登录时间': ['14:30', '14:25', '14:20', '14:15', '14:10', '14:05', '14:00', '13:55'],
        '登录IP': ['192.168.1.100', '192.168.1.101', '192.168.1.102', '192.168.1.103', 
                  '192.168.1.104', '192.168.1.105', '192.168.1.106', '192.168.1.107'],
        '状态': ['在线', '在线', '在线', '离线', '在线', '在线', '离线', '在线']
    })
    
    # 根据状态设置行颜色
    def highlight_user_status(row):
        if row['状态'] == '在线':
            return ['background-color: #e8f5e8'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_df = recent_logins.style.apply(highlight_user_status, axis=1)
    st.dataframe(styled_df, use_container_width=True)

# 用户管理页面
elif page_selection == "用户管理":
    st.header("👤 用户管理")
    
    # 用户操作按钮
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        if st.button("➕ 新增用户", use_container_width=True):
            st.session_state.show_add_user = True
    
    with col2:
        if st.button("📥 批量导入", use_container_width=True):
            st.success("批量导入功能")
    
    with col3:
        if st.button("📤 导出用户", use_container_width=True):
            st.success("用户数据导出中...")
    
    with col4:
        if st.button("🔄 同步用户", use_container_width=True):
            st.success("用户数据同步完成")
    
    # 用户搜索和筛选
    st.subheader("用户搜索")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        search_keyword = st.text_input("搜索用户", placeholder="输入用户名或姓名")
    
    with col2:
        dept_filter = st.selectbox("部门筛选", ['全部', '采购部', '仓储部', '销售部', '财务部', '运营部', '技术部'])
    
    with col3:
        role_filter = st.selectbox("角色筛选", ['全部', '普通用户', '部门主管', '系统管理员', '财务专员', '采购专员'])
    
    with col4:
        status_filter = st.selectbox("状态筛选", ['全部', '正常', '禁用', '锁定'])
    
    # 用户列表
    st.subheader("用户列表")
    
    users_data = pd.DataFrame({
        '用户ID': [f'U{i:04d}' for i in range(1, 21)],
        '用户名': [f'user{i:02d}' for i in range(1, 21)],
        '姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '王十二',
               '李十三', '张十四', '赵十五', '钱十六', '孙十七', '周十八', '吴十九', '郑二十', '王二一', '李二二'],
        '邮箱': [f'user{i:02d}@company.com' for i in range(1, 21)],
        '部门': ['采购部', '仓储部', '销售部', '财务部', '运营部'] * 4,
        '角色': ['采购专员', '仓管员', '销售经理', '财务专员', '运营主管'] * 4,
        '状态': ['正常'] * 18 + ['禁用', '锁定'],
        '创建时间': ['2024-01-15', '2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19'] * 4,
        '最后登录': ['2024-03-15 14:30', '2024-03-15 14:25', '2024-03-15 14:20', '2024-03-15 14:15', '2024-03-15 14:10'] * 4
    })
    
    # 根据状态设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_user_status(row):
        if row['状态'] == '禁用':
            return ['background-color: #ffebee'] * len(row)
        elif row['状态'] == '锁定':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = users_data.style.apply(highlight_user_status, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 新增用户表单
    if st.session_state.get('show_add_user', False):
        st.subheader("新增用户")
        
        col1, col2, col3 = st.columns(3)
        
        with col1:
            new_username = st.text_input("用户名", "")
            new_name = st.text_input("姓名", "")
            new_email = st.text_input("邮箱", "")
        
        with col2:
            new_dept = st.selectbox("部门", ['采购部', '仓储部', '销售部', '财务部', '运营部', '技术部'])
            new_role = st.selectbox("角色", ['普通用户', '部门主管', '系统管理员', '财务专员', '采购专员'])
            new_phone = st.text_input("手机号", "")
        
        with col3:
            new_password = st.text_input("密码", "", type="password")
            confirm_password = st.text_input("确认密码", "", type="password")
            
            col_btn1, col_btn2 = st.columns(2)
            with col_btn1:
                if st.button("保存用户", type="primary"):
                    if new_password == confirm_password:
                        st.success("用户创建成功！")
                        st.session_state.show_add_user = False
                        st.rerun()
                    else:
                        st.error("密码不一致！")
            
            with col_btn2:
                if st.button("取消"):
                    st.session_state.show_add_user = False
                    st.rerun()

# 角色管理页面
elif page_selection == "角色管理":
    st.header("🎭 角色管理")
    
    # 角色操作按钮
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        if st.button("➕ 新增角色", use_container_width=True):
            st.session_state.show_add_role = True
    
    with col2:
        if st.button("🔧 批量编辑", use_container_width=True):
            st.success("批量编辑功能")
    
    with col3:
        if st.button("📋 角色模板", use_container_width=True):
            st.success("角色模板管理")
    
    with col4:
        if st.button("📊 角色分析", use_container_width=True):
            st.success("角色使用分析")
    
    # 角色列表
    st.subheader("角色列表")
    
    roles_data = pd.DataFrame({
        '角色ID': [f'R{i:03d}' for i in range(1, 11)],
        '角色名称': ['系统管理员', '部门主管', '采购专员', '仓管员', '销售经理', 
                   '财务专员', '运营主管', '质检员', '客服专员', '普通用户'],
        '角色描述': ['系统最高权限管理员', '部门管理权限', '采购相关权限', '仓储管理权限', '销售管理权限',
                   '财务相关权限', '运营管理权限', '质量检验权限', '客户服务权限', '基础查看权限'],
        '用户数量': [5, 45, 78, 56, 34, 67, 23, 12, 89, 567],
        '权限数量': [50, 35, 25, 20, 30, 28, 32, 15, 18, 8],
        '状态': ['启用'] * 9 + ['禁用'],
        '创建时间': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05',
                   '2024-01-06', '2024-01-07', '2024-01-08', '2024-01-09', '2024-01-10'],
        '更新时间': ['2024-03-10', '2024-03-11', '2024-03-12', '2024-03-13', '2024-03-14',
                   '2024-03-15', '2024-03-01', '2024-03-02', '2024-03-03', '2024-03-04']
    })
    
    # 根据状态设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_role_status(row):
        if row['状态'] == '禁用':
            return ['background-color: #ffebee'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = roles_data.style.apply(highlight_role_status, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 角色详情
    st.subheader("角色详情")
    
    selected_role = st.selectbox("选择角色", roles_data['角色名称'].tolist())
    
    if selected_role:
        role_info = roles_data[roles_data['角色名称'] == selected_role].iloc[0]
        
        col1, col2 = st.columns(2)
        
        with col1:
            st.subheader("基本信息")
            st.write(f"**角色名称:** {role_info['角色名称']}")
            st.write(f"**角色描述:** {role_info['角色描述']}")
            st.write(f"**用户数量:** {role_info['用户数量']}人")
            st.write(f"**权限数量:** {role_info['权限数量']}个")
            st.write(f"**状态:** {role_info['状态']}")
            
            if st.button(f"编辑角色: {selected_role}", type="primary"):
                st.success(f"编辑角色: {selected_role}")
        
        with col2:
            st.subheader("角色权限")
            
            # 模拟权限列表
            permissions = [
                "用户管理", "角色管理", "权限管理", "系统配置", "数据导出",
                "库存查看", "库存编辑", "订单查看", "订单创建", "报表查看"
            ]
            
            for perm in permissions[:8]:  # 显示前8个权限
                st.checkbox(perm, value=True, disabled=True)
            
            if len(permissions) > 8:
                st.write(f"...还有{len(permissions)-8}个权限")
    
    # 新增角色表单
    if st.session_state.get('show_add_role', False):
        st.subheader("新增角色")
        
        col1, col2 = st.columns(2)
        
        with col1:
            new_role_name = st.text_input("角色名称", "")
            new_role_desc = st.text_area("角色描述", "")
            new_role_status = st.selectbox("状态", ['启用', '禁用'])
        
        with col2:
            st.subheader("权限配置")
            
            # 权限分组
            perm_groups = {
                "用户管理": ["用户查看", "用户创建", "用户编辑", "用户删除"],
                "系统管理": ["系统配置", "日志查看", "备份恢复", "监控管理"],
                "业务管理": ["订单管理", "库存管理", "采购管理", "销售管理"]
            }
            
            selected_perms = []
            for group, perms in perm_groups.items():
                st.write(f"**{group}:**")
                for perm in perms:
                    if st.checkbox(perm, key=f"perm_{perm}"):
                        selected_perms.append(perm)
        
        col_btn1, col_btn2 = st.columns(2)
        with col_btn1:
            if st.button("保存角色", type="primary"):
                st.success("角色创建成功！")
                st.session_state.show_add_role = False
                st.rerun()
        
        with col_btn2:
            if st.button("取消", key="cancel_role"):
                st.session_state.show_add_role = False
                st.rerun()

# 权限管理页面
elif page_selection == "权限管理":
    st.header("🔐 权限管理")
    
    # 权限操作按钮
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        if st.button("➕ 新增权限", use_container_width=True):
            st.session_state.show_add_permission = True
    
    with col2:
        if st.button("🔧 权限分配", use_container_width=True):
            st.success("权限分配功能")
    
    with col3:
        if st.button("📋 权限模板", use_container_width=True):
            st.success("权限模板管理")
    
    with col4:
        if st.button("📊 权限分析", use_container_width=True):
            st.success("权限使用分析")
    
    # 权限树形结构
    st.subheader("权限结构")
    
    # 使用expander展示权限树
    with st.expander("🏢 系统管理", expanded=True):
        col1, col2 = st.columns(2)
        with col1:
            st.write("- 👥 用户管理")
            st.write("  - 用户查看")
            st.write("  - 用户创建")
            st.write("  - 用户编辑")
            st.write("  - 用户删除")
            st.write("- 🎭 角色管理")
            st.write("  - 角色查看")
            st.write("  - 角色创建")
            st.write("  - 角色编辑")
        with col2:
            st.write("- 🔐 权限管理")
            st.write("  - 权限查看")
            st.write("  - 权限分配")
            st.write("  - 权限回收")
            st.write("- ⚙️ 系统配置")
            st.write("  - 参数配置")
            st.write("  - 系统监控")
            st.write("  - 日志管理")
    
    with st.expander("📦 业务管理"):
        col1, col2 = st.columns(2)
        with col1:
            st.write("- 📋 订单管理")
            st.write("  - 订单查看")
            st.write("  - 订单创建")
            st.write("  - 订单编辑")
            st.write("  - 订单审核")
            st.write("- 📦 库存管理")
            st.write("  - 库存查看")
            st.write("  - 库存调整")
            st.write("  - 盘点管理")
        with col2:
            st.write("- 🛒 采购管理")
            st.write("  - 采购计划")
            st.write("  - 供应商管理")
            st.write("  - 采购审批")
            st.write("- 💰 财务管理")
            st.write("  - 财务查看")
            st.write("  - 财务审核")
            st.write("  - 报表生成")
    
    # 权限列表
    st.subheader("权限列表")
    
    permissions_data = pd.DataFrame({
        '权限ID': [f'P{i:03d}' for i in range(1, 21)],
        '权限名称': ['用户查看', '用户创建', '用户编辑', '用户删除', '角色查看', '角色创建', '角色编辑', '角色删除',
                   '权限查看', '权限分配', '订单查看', '订单创建', '订单编辑', '库存查看', '库存调整',
                   '采购计划', '供应商管理', '财务查看', '报表生成', '系统配置'],
        '权限分类': ['用户管理', '用户管理', '用户管理', '用户管理', '角色管理', '角色管理', '角色管理', '角色管理',
                   '权限管理', '权限管理', '订单管理', '订单管理', '订单管理', '库存管理', '库存管理',
                   '采购管理', '采购管理', '财务管理', '财务管理', '系统管理'],
        '权限描述': ['查看用户信息', '创建新用户', '编辑用户信息', '删除用户', '查看角色信息', '创建新角色', '编辑角色信息', '删除角色',
                   '查看权限信息', '分配用户权限', '查看订单信息', '创建新订单', '编辑订单信息', '查看库存信息', '调整库存数量',
                   '制定采购计划', '管理供应商信息', '查看财务数据', '生成各类报表', '系统参数配置'],
        '使用角色数': [8, 3, 5, 2, 6, 2, 3, 1, 4, 2, 9, 7, 5, 8, 4, 3, 4, 5, 6, 2],
        '状态': ['启用'] * 19 + ['禁用']
    })
    
    # 根据状态设置行颜色
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_permission_status(row):
        if row['状态'] == '禁用':
            return ['background-color: #ffebee'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = permissions_data.style.apply(highlight_permission_status, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 权限分配矩阵
    st.subheader("权限分配矩阵")
    
    # 创建权限矩阵
    roles = ['系统管理员', '部门主管', '采购专员', '仓管员', '销售经理']
    permissions = ['用户管理', '角色管理', '订单管理', '库存管理', '采购管理', '财务管理']
    
    # 模拟权限矩阵数据
    matrix_data = np.array([
        [1, 1, 1, 1, 1, 1],  # 系统管理员
        [0, 0, 1, 1, 1, 1],  # 部门主管
        [0, 0, 1, 0, 1, 0],  # 采购专员
        [0, 0, 1, 1, 0, 0],  # 仓管员
        [0, 0, 1, 0, 0, 1],  # 销售经理
    ])
    
    fig_matrix = px.imshow(matrix_data, 
                          x=permissions, 
                          y=roles,
                          color_continuous_scale='RdYlGn',
                          title="角色权限分配矩阵")
    fig_matrix.update_layout(height=400)
    st.plotly_chart(fig_matrix, use_container_width=True)
    
    # 新增权限表单
    if st.session_state.get('show_add_permission', False):
        st.subheader("新增权限")
        
        col1, col2 = st.columns(2)
        
        with col1:
            new_perm_name = st.text_input("权限名称", "")
            new_perm_category = st.selectbox("权限分类", ['用户管理', '角色管理', '权限管理', '订单管理', '库存管理', '采购管理', '财务管理', '系统管理'])
            new_perm_desc = st.text_area("权限描述", "")
        
        with col2:
            new_perm_code = st.text_input("权限代码", "")
            new_perm_status = st.selectbox("状态", ['启用', '禁用'])
            new_perm_level = st.selectbox("权限级别", ['低', '中', '高'])
        
        col_btn1, col_btn2 = st.columns(2)
        with col_btn1:
            if st.button("保存权限", type="primary"):
                st.success("权限创建成功！")
                st.session_state.show_add_permission = False
                st.rerun()
        
        with col_btn2:
            if st.button("取消", key="cancel_permission"):
                st.session_state.show_add_permission = False
                st.rerun()

# 组织架构页面
elif page_selection == "组织架构":
    st.header("🏢 组织架构")
    
    # 组织架构操作按钮
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        if st.button("➕ 新增部门", use_container_width=True):
            st.session_state.show_add_dept = True
    
    with col2:
        if st.button("🔧 编辑架构", use_container_width=True):
            st.success("编辑组织架构")
    
    with col3:
        if st.button("👥 人员调动", use_container_width=True):
            st.success("人员调动功能")
    
    with col4:
        if st.button("📊 架构分析", use_container_width=True):
            st.success("组织架构分析")
    
    # 组织架构树
    st.subheader("组织架构")
    
    # 使用HTML和CSS创建组织架构图
    org_chart_html = """
    <div style="text-align: center; padding: 20px;">
        <div style="margin-bottom: 30px;">
            <div style="display: inline-block; padding: 10px 20px; background-color: #007bff; color: white; border-radius: 5px; margin: 5px;">
                <strong>总经理办公室</strong><br>
                <small>3人</small>
            </div>
        </div>
        
        <div style="display: flex; justify-content: space-around; flex-wrap: wrap; margin-bottom: 20px;">
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #28a745; color: white; border-radius: 5px; margin: 5px;">
                    <strong>采购部</strong><br>
                    <small>234人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">采购组 (78人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">供应商组 (56人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">质检组 (45人)</div>
                </div>
            </div>
            
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #ffc107; color: black; border-radius: 5px; margin: 5px;">
                    <strong>仓储部</strong><br>
                    <small>198人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">入库组 (67人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">出库组 (89人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">盘点组 (42人)</div>
                </div>
            </div>
            
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #dc3545; color: white; border-radius: 5px; margin: 5px;">
                    <strong>销售部</strong><br>
                    <small>156人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">销售组 (89人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">客服组 (45人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">市场组 (22人)</div>
                </div>
            </div>
        </div>
        
        <div style="display: flex; justify-content: space-around; flex-wrap: wrap;">
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #17a2b8; color: white; border-radius: 5px; margin: 5px;">
                    <strong>财务部</strong><br>
                    <small>123人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">会计组 (67人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">出纳组 (34人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">审计组 (22人)</div>
                </div>
            </div>
            
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #6610f2; color: white; border-radius: 5px; margin: 5px;">
                    <strong>运营部</strong><br>
                    <small>89人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">运营组 (45人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">数据组 (23人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">策划组 (21人)</div>
                </div>
            </div>
            
            <div style="text-align: center; margin: 10px;">
                <div style="padding: 8px 15px; background-color: #e83e8c; color: white; border-radius: 5px; margin: 5px;">
                    <strong>技术部</strong><br>
                    <small>67人</small>
                </div>
                <div style="margin-top: 10px;">
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">开发组 (34人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">运维组 (23人)</div>
                    <div style="padding: 5px 10px; background-color: #6c757d; color: white; border-radius: 3px; margin: 2px; font-size: 12px;">测试组 (10人)</div>
                </div>
            </div>
        </div>
    </div>
    """
    
    st.markdown(org_chart_html, unsafe_allow_html=True)
    
    # 部门详情
    st.subheader("部门详情")
    
    dept_details = pd.DataFrame({
        '部门名称': ['采购部', '仓储部', '销售部', '财务部', '运营部', '技术部'],
        '部门负责人': ['张主管', '李主管', '王主管', '赵主管', '钱主管', '孙主管'],
        '人员数量': [234, 198, 156, 123, 89, 67],
        '下属组数': [3, 3, 3, 3, 3, 3],
        '成立时间': ['2020-01-01', '2020-01-01', '2020-01-01', '2020-01-01', '2020-01-15', '2020-02-01'],
        '部门职能': ['负责采购和供应商管理', '负责仓储和物流管理', '负责销售和客户服务', 
                   '负责财务和会计管理', '负责运营和数据分析', '负责技术开发和维护'],
        '联系电话': ['010-1234-5678', '010-1234-5679', '010-1234-5680', 
                   '010-1234-5681', '010-1234-5682', '010-1234-5683']
    })
    
    st.dataframe(dept_details, use_container_width=True)
    
    # 人员分布分析
    st.subheader("人员分布分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 部门人员分布饼图
        fig_dept_pie = px.pie(dept_details, values='人员数量', names='部门名称',
                             title="各部门人员分布")
        st.plotly_chart(fig_dept_pie, use_container_width=True)
    
    with col2:
        # 部门人员数量柱状图
        fig_dept_bar = px.bar(dept_details, x='部门名称', y='人员数量',
                             title="各部门人员数量对比")
        st.plotly_chart(fig_dept_bar, use_container_width=True)
    
    # 新增部门表单
    if st.session_state.get('show_add_dept', False):
        st.subheader("新增部门")
        
        col1, col2 = st.columns(2)
        
        with col1:
            new_dept_name = st.text_input("部门名称", "")
            new_dept_leader = st.text_input("部门负责人", "")
            new_dept_phone = st.text_input("联系电话", "")
        
        with col2:
            new_dept_parent = st.selectbox("上级部门", ['总经理办公室', '采购部', '仓储部', '销售部', '财务部', '运营部', '技术部'])
            new_dept_function = st.text_area("部门职能", "")
        
        col_btn1, col_btn2 = st.columns(2)
        with col_btn1:
            if st.button("保存部门", type="primary"):
                st.success("部门创建成功！")
                st.session_state.show_add_dept = False
                st.rerun()
        
        with col_btn2:
            if st.button("取消", key="cancel_dept"):
                st.session_state.show_add_dept = False
                st.rerun()

# 访问控制页面
elif page_selection == "访问控制":
    st.header("🛡️ 访问控制")
    
    # 访问控制概览
    st.subheader("访问控制概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("今日访问次数", "12,345次", "+1,234次")
    
    with col2:
        st.metric("拒绝访问次数", "23次", "+5次")
    
    with col3:
        st.metric("异常访问次数", "8次", "+2次")
    
    with col4:
        st.metric("访问成功率", "99.7%", "+0.1%")
    
    # 访问规则配置
    st.subheader("访问规则配置")
    
    access_rules = pd.DataFrame({
        '规则名称': ['IP白名单', 'IP黑名单', '时间限制', '地域限制', '设备限制', '频率限制'],
        '规则类型': ['白名单', '黑名单', '时间控制', '地域控制', '设备控制', '频率控制'],
        '规则内容': ['192.168.1.0/24', '恶意IP列表', '工作时间8:00-18:00', '仅限国内访问', '仅限公司设备', '每分钟最多100次'],
        '适用范围': ['全系统', '全系统', '管理后台', '全系统', '敏感功能', '全系统'],
        '状态': ['启用', '启用', '启用', '禁用', '启用', '启用'],
        '创建时间': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-06'],
        '最后更新': ['2024-03-10', '2024-03-11', '2024-03-12', '2024-03-13', '2024-03-14', '2024-03-15']
    })
    
    # 根据状态设置行颜色
    def highlight_rule_status(row):
        if row['状态'] == '禁用':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_access_rules = access_rules.style.apply(highlight_rule_status, axis=1)
    st.dataframe(styled_access_rules, use_container_width=True)
    
    # 访问统计分析
    st.subheader("访问统计分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 访问时间分布
        hours = list(range(24))
        access_by_hour = pd.DataFrame({
            '小时': hours,
            '访问次数': [100 + 500*np.sin((h-9)*np.pi/8) + np.random.normal(0, 50) 
                       if 8 <= h <= 18 else 50 + np.random.normal(0, 20) for h in hours]
        })
        
        fig_access_hour = px.line(access_by_hour, x='小时', y='访问次数',
                                title="24小时访问分布")
        st.plotly_chart(fig_access_hour, use_container_width=True)
    
    with col2:
        # 访问来源分布
        access_source = pd.DataFrame({
            '来源': ['内网', '外网', '移动端', 'API', '第三方'],
            '访问次数': [6789, 3456, 1234, 567, 299]
        })
        
        fig_access_source = px.pie(access_source, values='访问次数', names='来源',
                                 title="访问来源分布")
        st.plotly_chart(fig_access_source, use_container_width=True)
    
    # 实时访问监控
    st.subheader("实时访问监控")
    
    real_time_access = pd.DataFrame({
        '时间': ['14:30:25', '14:30:20', '14:30:15', '14:30:10', '14:30:05'],
        '用户': ['张三', '李四', '王五', '系统', '赵六'],
        '访问资源': ['/dashboard', '/api/inventory', '/orders', '/api/sync', '/reports'],
        '访问方式': ['Web', 'API', 'Web', 'API', 'Web'],
        'IP地址': ['192.168.1.100', '192.168.1.101', '192.168.1.102', '127.0.0.1', '192.168.1.103'],
        '用户代理': ['Chrome/120.0', 'PostmanRuntime/7.32', 'Firefox/121.0', 'System/1.0', 'Safari/17.0'],
        '访问结果': ['成功', '成功', '成功', '成功', '拒绝'],
        '响应时间': ['120ms', '85ms', '95ms', '45ms', 'N/A']
    })
    
    # 根据访问结果设置行颜色
    def highlight_access_result(row):
        if row['访问结果'] == '拒绝':
            return ['background-color: #ffebee'] * len(row)
        elif row['访问结果'] == '异常':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_real_time_access = real_time_access.style.apply(highlight_access_result, axis=1)
    st.dataframe(styled_real_time_access, use_container_width=True)
    
    # 安全事件告警
    st.subheader("安全事件告警")
    
    security_alerts = pd.DataFrame({
        '时间': ['14:25', '13:45', '12:30', '11:15', '10:20'],
        '事件类型': ['异常登录', '频繁访问', 'IP黑名单', '权限越权', '暴力破解'],
        '严重级别': ['高', '中', '高', '严重', '高'],
        '事件描述': ['用户从异地IP登录', 'API调用频率超过限制', '黑名单IP尝试访问', '用户尝试访问无权限资源', '多次密码错误尝试'],
        '涉及用户': ['张三', 'API用户', '未知', '李四', '王五'],
        'IP地址': ['203.0.113.1', '192.168.1.200', '198.51.100.1', '192.168.1.101', '192.168.1.102'],
        '处理状态': ['已处理', '已处理', '已阻止', '已处理', '已阻止']
    })
    
    # 根据严重级别设置行颜色
    def highlight_alert_level(row):
        if row['严重级别'] == '严重':
            return ['background-color: #ffebee'] * len(row)
        elif row['严重级别'] == '高':
            return ['background-color: #fff3e0'] * len(row)
        elif row['严重级别'] == '中':
            return ['background-color: #fffbf0'] * len(row)
        else:
            return ['background-color: #f0f8ff'] * len(row)
    
    styled_security_alerts = security_alerts.style.apply(highlight_alert_level, axis=1)
    st.dataframe(styled_security_alerts, use_container_width=True)
    
    # 访问控制操作
    st.subheader("访问控制操作")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        if st.button("🚫 紧急封禁", use_container_width=True):
            st.error("紧急封禁功能已激活")
    
    with col2:
        if st.button("🔓 解除封禁", use_container_width=True):
            st.success("封禁已解除")
    
    with col3:
        if st.button("📊 生成报告", use_container_width=True):
            st.success("访问控制报告生成中...")
    
    with col4:
        if st.button("⚙️ 规则配置", use_container_width=True):
            st.success("跳转到规则配置页面")

# 审计日志页面
elif page_selection == "审计日志":
    st.header("📋 审计日志")
    
    # 审计概览
    st.subheader("审计概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("今日审计记录", "8,765条", "+567条")
    
    with col2:
        st.metric("敏感操作", "234条", "+23条")
    
    with col3:
        st.metric("异常操作", "12条", "+3条")
    
    with col4:
        st.metric("审计覆盖率", "98.5%", "+0.2%")
    
    # 审计日志查询
    st.subheader("审计日志查询")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        audit_user_filter = st.selectbox("用户筛选", ['全部', '张三', '李四', '王五', '赵六'])
    
    with col2:
        audit_action_filter = st.selectbox("操作类型", ['全部', '登录', '数据修改', '权限变更', '系统配置', '数据导出'])
    
    with col3:
        audit_start_date = st.date_input("开始日期", datetime.now().date(), key="audit_start")
    
    with col4:
        audit_end_date = st.date_input("结束日期", datetime.now().date(), key="audit_end")
    
    audit_keyword = st.text_input("关键词搜索", placeholder="输入搜索关键词", key="audit_search")
    
    if st.button("🔍 查询审计日志", type="primary"):
        st.success("审计日志查询完成")
    
    # 审计日志列表
    st.subheader("审计日志记录")
    
    audit_logs = pd.DataFrame({
        '时间': ['14:30:25', '14:30:20', '14:30:15', '14:30:10', '14:30:05', 
               '14:30:00', '14:29:55', '14:29:50', '14:29:45', '14:29:40'],
        '用户': ['张三', '李四', '系统', '王五', '赵六', '张三', '系统', '李四', '王五', '系统'],
        '操作类型': ['数据修改', '登录', '数据同步', '权限变更', '数据导出', '登录', '系统配置', '数据查询', '数据修改', '数据备份'],
        '操作对象': ['用户信息', '系统', '库存数据', '用户权限', '财务报表', '系统', '系统参数', '订单数据', '商品信息', '数据库'],
        '操作详情': ['修改用户张三的邮箱', '用户登录成功', '同步库存数据到BI系统', '为用户李四分配采购权限', '导出3月财务报表',
                   '用户登录成功', '修改系统超时时间', '查询订单列表', '修改商品P001价格', '执行数据库备份'],
        'IP地址': ['192.168.1.100', '192.168.1.101', '127.0.0.1', '192.168.1.102', '192.168.1.103',
                 '192.168.1.100', '127.0.0.1', '192.168.1.101', '192.168.1.102', '127.0.0.1'],
        '操作结果': ['成功', '成功', '成功', '成功', '成功', '成功', '成功', '成功', '成功', '成功'],
        '风险级别': ['中', '低', '低', '高', '高', '低', '中', '低', '中', '低']
    })
    
    # 根据风险级别设置行颜色
    def highlight_risk_level(row):
        if row['风险级别'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['风险级别'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #f0f8ff'] * len(row)
    
    styled_df = audit_logs.style.apply(highlight_risk_level, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 审计统计分析
    st.subheader("审计统计分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 操作类型分布
        operation_dist = pd.DataFrame({
            '操作类型': ['数据查询', '数据修改', '登录', '权限变更', '系统配置', '数据导出'],
            '操作次数': [3456, 1234, 2345, 234, 123, 345]
        })
        
        fig_operation = px.pie(operation_dist, values='操作次数', names='操作类型',
                             title="操作类型分布")
        st.plotly_chart(fig_operation, use_container_width=True)
    
    with col2:
        # 风险级别分布
        risk_dist = pd.DataFrame({
            '风险级别': ['低', '中', '高'],
            '记录数': [6543, 1876, 346]
        })
        
        fig_risk = px.bar(risk_dist, x='风险级别', y='记录数',
                         title="风险级别分布")
        st.plotly_chart(fig_risk, use_container_width=True)
    
    # 审计趋势分析
    st.subheader("审计趋势分析")
    
    # 生成最近30天的审计数据
    dates = pd.date_range(start='2024-02-15', end='2024-03-15', freq='D')
    audit_trend = pd.DataFrame({
        '日期': dates,
        '总记录数': [8000 + 1000*np.sin(i*2*np.pi/7) + np.random.normal(0, 200) 
                    for i in range(len(dates))],
        '高风险操作': [50 + 20*np.sin(i*2*np.pi/7) + np.random.normal(0, 5) 
                     for i in range(len(dates))]
    })
    
    fig_audit_trend = px.line(audit_trend, x='日期', y=['总记录数', '高风险操作'],
                            title="审计记录趋势")
    st.plotly_chart(fig_audit_trend, use_container_width=True)
    
    # 合规性检查
    st.subheader("合规性检查")
    
    compliance_checks = pd.DataFrame({
        '检查项目': ['密码策略', '权限分离', '数据加密', '访问控制', '审计完整性', '备份策略'],
        '检查结果': ['通过', '通过', '通过', '警告', '通过', '通过'],
        '合规标准': ['ISO27001', 'SOX', 'GDPR', 'ISO27001', 'SOX', 'ISO27001'],
        '检查时间': ['2024-03-15', '2024-03-14', '2024-03-13', '2024-03-12', '2024-03-11', '2024-03-10'],
        '下次检查': ['2024-04-15', '2024-04-14', '2024-04-13', '2024-04-12', '2024-04-11', '2024-04-10'],
        '备注': ['密码强度符合要求', '权限分配合理', '数据传输加密', '部分权限过于宽泛', '审计日志完整', '备份策略有效']
    })
    
    # 根据检查结果设置行颜色
    def highlight_compliance_result(row):
        if row['检查结果'] == '不通过':
            return ['background-color: #ffebee'] * len(row)
        elif row['检查结果'] == '警告':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = compliance_checks.style.apply(highlight_compliance_result, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 审计报告生成
    st.subheader("审计报告生成")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        report_type = st.selectbox("报告类型", ['日报', '周报', '月报', '年报', '自定义'])
        report_format = st.selectbox("报告格式", ['PDF', 'Excel', 'Word', 'HTML'])
    
    with col2:
        report_start_date = st.date_input("报告开始日期", datetime.now().date() - timedelta(days=7))
        report_end_date = st.date_input("报告结束日期", datetime.now().date())
    
    with col3:
        include_details = st.checkbox("包含详细记录", value=True)
        include_charts = st.checkbox("包含统计图表", value=True)
        
        if st.button("生成审计报告", type="primary"):
            st.success("审计报告生成中，请稍候...")
    
    # 审计配置
    st.subheader("审计配置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("审计范围")
        audit_login = st.checkbox("登录操作", value=True)
        audit_data_modify = st.checkbox("数据修改", value=True)
        audit_permission = st.checkbox("权限变更", value=True)
        audit_system_config = st.checkbox("系统配置", value=True)
        audit_data_export = st.checkbox("数据导出", value=True)
        
        st.subheader("存储配置")
        audit_retention = st.number_input("审计日志保留天数", min_value=30, value=365, step=30)
        audit_backup = st.checkbox("启用审计日志备份", value=True)
    
    with col2:
        st.subheader("告警配置")
        alert_high_risk = st.checkbox("高风险操作告警", value=True)
        alert_failed_login = st.checkbox("登录失败告警", value=True)
        alert_permission_change = st.checkbox("权限变更告警", value=True)
        
        st.subheader("报告配置")
        auto_report = st.checkbox("自动生成报告", value=True)
        report_frequency = st.selectbox("报告频率", ['每日', '每周', '每月'])
        report_recipients = st.text_area("报告接收人", "admin@company.com")
    
    if st.button("保存审计配置", type="primary"):
        st.success("审计配置已保存！")

# 页面底部信息
st.markdown("---")
st.markdown(
    """
    <div style="text-align: center; color: #666; padding: 20px;">
        <p>👥 用户权限管理 | 全面管理用户、角色、权限和组织架构</p>
        <p>支持用户管理、角色分配、权限控制、访问监控和审计日志等功能</p>
    </div>
    """,
    unsafe_allow_html=True
)